查看原文
其他

Stata中的判断神器——confirm命令

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:乔昕悦,香港大学经管学院

本文编辑:温和铭

技术总编:李婷婷

Stata&Python云端课程来啦!

       为了平衡团队运营成本,维系公众号的运营,也与国内动辄数千元的Stata课程缩短差距,我们的网课不得不上调价格,我们决定于9月1日起调价,Python课程的价格调整为199.9元Stata进阶课程调为199.9元Stata基础课程调整到229.9元Stata文本分析正则表达式网络爬虫基本字符串课程调整至79.9元。大家可以告知一下身边想要购买的小伙伴,欲购从速哦 对报名有任何疑问欢迎在公众号后台和腾讯课堂留言~我们在这篇推文的最后提供了每门课程的课程二维码,大家有需要的话可以直接扫描二维码查看课程详情并进行购买哦~

confirm命令一般用于编制program,主要用来验证命令后的信息是否存在、是否属于合规的类型,如果不是,则报错,显示相应的错误信息和非零返回值。

在实际应用中,confirm命令经常和capture命令配合使用。加上capture后,该命令的执行结果不会显示,即使程序执行时出现错误,程序也会继续。capture命令会生成一个返回值_rc。若capture confirm命令未出错,则_rc值为0;若出错,则_rc值为对应的错误代码。

接下来,让我们一起来看看confirm命令常用的几种使用方式吧~


一、判断字符串的存在
格式confirm existence stringconfirm existence可以用来判断其后面字符串的存在性,比如confirm existence this is something 用于确认字符串“this is something”是否存在。比如我们在编制一个命令,调用命令的时候需要判断是否传递了参数,这时候就可以用confirm existence判断对应参数位置是否有信息输入。试执行如下命令:
clear all confirm existence //报错confirm existence this is something //不报错 local 1 "this is something" //把“this is something”放在1这个局部宏中confirm existence `1' //不报错confirm existence `0' //报错简单说,confirm existence就是为了判断它自己后面有没有跟一个字符串,这个字符串可能是调用program定义的一个命令的参数,往往通过local传递。在上边的程序中:使用clear all清空内存后,第一个confirm existence命令后面没有任何信息,所以直接报错。然后我们定义了一个local 1, 其内容为“this is something”,此时confirm existence看到后面确实有字符串,因此confirm通过,不会报错。由于local 0尚未进行定义,我们执行confirm existence `0’的时候,被Stata翻译成confirm existence,所以报错。
、判断变量的存在和类型

格式confirm[ new | numeric | string | str# | type ] variable varlist [, exact]

默认情况下,varlist中的变量可以是缩写,选项exact表明变量必须完全匹配。

01判断变量的存在
有时候由于变量较多,我们一时不能挨个查看数据中是否含有某个变量,这时我们可以通过confirm variable来判断变量是否存在和有效。下面我们编制一个程序,然后通过调用这个新命令检查变量是否存在:
capture program drop check //如果内存中已经定义过名为check的命令,删除该命令program check //编制新命令checkcapture confirm variable `1' //判断通过宏传递的参数(变量)是否存在disp _rcif _rc==0 { //若不报错,_rc为0,证明变量存在 disp "`1' exists" }else { //反之,变量不存在 disp "`1' does not exists" }end以Stata自带的auto数据为例,假如我们想调用check命令验证一下变量weight和year是否存在,我们在上述程序的基础上键入如下命令(需要注意的是,这里使用程序定义语句编写的新命令check,退出Stata或者删除上述程序后命令就不存在了):
sysuse autocheck weightcheck year

Stata读出的结果如下图所示,经过验证,我们发现weight变量存在,year变量不存在。


02判断变量的类型
有时候我们会希望输入的变量是特定的类型(字符型or数值型or其他),这时我们加上括号中的内容用来判断,type可以是{ byte | int | long | float | double | str# | strL }
举例说明,confirm numeric variable用于判断变量是否是数值型的;confirm str# variable用于判断是否变量都是str#格式的,比如str10或str42(这里不包括strL)。
假如我们想要判断Stata自带的auto数据中变量make,mpg,weight,length和foreign的类型,命令如下:
clear allsysuse auto foreach v in make mpg weight length foreign { //运用foreach语句循环读入变量 capture confirm numeric variable `v' //capture和confirm结合,根据返回值判断变量的类型 disp _rc if _rc==0 { //若命令未出错,变量为数值型,则_rc为0 disp "`v' is a numeric variable" } else { //若命令出错,_rc为错误的对应代码,这里是7 disp "`v' is a string variable" }

Stata输出的结果如下图所示,我们可以看到除了make,其他变量都是数值型的:

我们也可以编制一个新命令来判断变量的类型,程序如下:

clear allcapture program drop vtypeprogram vtypecapture confirm str# variable `1'disp _rcif _rc { //if判断中认为0为假,不执行;非0为真,执行 disp "`1' is a numeric variable" }else { disp "`1' is a string variable" }endsysuse autovtype makevtype mpg

在这个程序中,我们通过编制新命令vtype来判断通过宏传递的参数(变量)的类型。程序运行后的结果如下图所示,我们可以得到,在auto数据中,变量make是字符型的,mpg是数值型的:


、判断文件的存在
01判断文件存在且可读

格式confirm file filename

在这里我们使用auto数据创建一个myauto.dta文件,并检验它的存在和可读性。程序如下:

clear allcd d:\!RMDIR d:\temp /s/q //调用命令删除目录;/s选项表示删除所有子文件夹和其中的文件; /q选项安静模式,即删除的时候不询问是否确认删除mkdir d:/temp/ //创建目录sysuse auto, clear save d:/temp/myauto, replace confirm file d:/temp/myauto.dta //确认myauto.dta存在且可读

02判断文件不存在且可被创建

格式confirm new file filename

假如我们在上面的基础上想继续确认文件的不存在性,可以加入confirm new file

在这里如果我们检验myauto.dta这个文件,Stata就会报错,因为它已经在上述程序中被创建了,是存在的;但我们检验一个不存在的myauto1.dta文件时,Stata就会判断该文件不存在且可被创建。程序如下:

confirm new file d:/temp/myauto.dta //报错confirm new file d:/temp/myauto1.dta //不报错
Note:即使文件存在,如果该目录错误或者我们没有在这个目录中创建文件的权限,Stata也会报错。

、判断字符串的指定格式

格式confirm [numeric | string | date] format string

confirm format用来确认字符串是指定的格式。其中,numeric选项要求后面待确认的内容是数值型的,包括general、fixed和exponential;    string选项要求是字符型的;date要求是日期格式的。

我们可以通过如下的几个例子,展示一下三种指定格式的判断:
clear all*日期confirm date format %d //不报错 %d是例如01oct2021的日期格式confirm date format %dCY-N-D //不报错 %CY-N-D是例如2021-10-01的日期格式*字符型confirm string format %11s //不报错 %11s表示输出格式为占位11的字符型confirm string format %11.4s //报错 没有这种格式*数值型confirm numeric format %011.4f //不报错 该格式总共占11位(包括小数点),小数点后四位,不足的位数用0补齐在前面

、判断frame框架的存在和可创建性

格式confirm [new] frame name

首先简单介绍一下frame命令,这一命令允许内存中装入多个数据集,每个数据集被存入一个框架中。具体关于frame命令的使用可以阅读我们公众号的《frame框架——我到底在哪个“房间”》等推文~

confirm frame后跟框架的名称可以用来判断该框架是否存在,不存在时程序会报错;加入new选项之后,confirm new frame后跟框架名字用来确认该框架不存在,且该名称的框架可被创建。

我们可以通过如下例子展示该命令的使用:

frame reset //Stata恢复初始格式,清除内存中的所有框架confirm frame default //不报错,default是内存中默认工作的框架confirm frame myframe //报错,因为内存中没有myframe框架confirm new frame myframe //不报错,myframe框架不存在且可被创建,该命名有效

、判断命名是否符合规则

格式confirm names names

这个命令可以用来确认后面所跟的命名是否是符合命名规则的、有效的命名。举个例子,我们键入如下命令:

confirm names ab.cd _abcd abcd @abcd

运行这个命令,程序会报错,并显示不合规则的命名内容:


、判断参数是否可被解释为数字

格式confirm [integer] number string

confirm number可以用来验证参数是否能被解释为数字,比如1, 5.2, -5.2和2.5e+10都是可行的。加上integer选项则指定后面的参数必须是整数。在下面的两个例子中,因为1.2和6001111分别可以判定为数字和整数,所以程序都不会报错。

confirm number 1.2 confirm integer number 6001111

今天关于confirm命令的介绍就到这里,真的是干货满满!除了我们详细介绍的几种用法之外,confirm命令还可以通过confirm matrixconfirm scalar来确认矩阵(matrix)和标量(scalar)的存在。大家有兴趣也可以了解一下!

最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。


三连一下,了解更多内容

腾讯课堂课程二维码








                


 对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!





往期推文推荐
         cngdf——名义GDP与实际GDP之间的摆渡船

最近《扫黑风暴》有点火爆!我从豆瓣评论中发现了这些……

随机森林-Random Forest 

复原之神--preserve&restore

         合并,“纵”享新丝滑:frameappend & xframeappend
什么是全局配置项?|从零开始的Pyecharts(二)帮你拿下数据可视化|从零开始的Pyecharts 

Stata助力疫情打卡管理——是谁没有接龙呢?

这十年,《金融研究》的编委和读者偏爱哪些研究话题和文章?

【案例展示】Python与数据库交互

学好这一手,英语词典常在手 

玩转Stata中的数学函数

用spmap看中国空气质量

戳穿围城面具:安利&劝退一个专业

走进图文并茂的攻略世界 

玩转word文档“大变身”——wordconvert

数据读入|一文读懂用Stata读入不同类型的数据

简述递归

OpenCV库——轻松更换证件照背景色

800万年薪!还有谁?!

千古伤心词人,词伤几何?

去哪儿网攻略爬取——跟我一起去大理吧

"有你才有团"——Stata爬取王者荣耀英雄海报

爬虫实战|嚣张的徽州宴老板娘错在哪?

如何获取衡量股民情绪的指标?|东方财富股吧标题爬虫

利用Python构建马科维茨有效边界

rangestat,让统计量灵活滚动起来!

听说这样做立项成功率更高哦

如何处理缺失值?这一篇搞定!

善用dataex命令,高效沟通你我他

用Markdown制作简历,强力助力你的求职季

大数据下的大学分数线排行榜,快来围观!

关于我们 


微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里

作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众
中提出,只需支付少量赏金,我们会在后期的推文里给予解答。




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存